const express = require('express') // 引入express

const app = express() // 创建网站服务器

require('./connect.js') // 连接数据库
const { Admin } = require('./admin.js') // 登录用户集合

// 注册时检测用户名和邮箱地址是否可用
app.get('/user', (req, res) => {
  // 注册用户时的传参
  // req.query 获取 get 传参
  let { username, email } = req.query
  // console.log(username, email)
  let data = {
    status: 200,
    username: false,
    email: false,
    namemsg: '',
    emailmsg: ''
  }
  Admin.find()
    .select('username email -_id')
    .then((result) => {
      // 根据索引检索注册的用户名是否在数据库中存在
      const uname = result.findIndex((item) => item.username === username)
      const emails = result.findIndex((item) => item.email === email)
      console.log(uname) // -1不存在 // 返回索引存在
      if (uname === -1) {
        data.username = true
        if (username !== '') {
          data.namemsg = '用户名可用'
        }
      } else {
        data.namemsg = '用户名已经存在'
      }

      if (emails === -1) {
        data.email = true
        if (email !== '') {
          data.emailmsg = '邮箱可用'
        }
      } else {
        data.emailmsg = '邮箱已经存在'
      }
      res.send(data)
    })
})

// 注册用户成功接口
app.post('/register', (req, res) => {
  // 服务端接收 post 的请求参数
  let postData = ''

  req.on('data', (chunk) => {
    postData += chunk.toString()
  })
  req.on('end', async () => {
    // 将 字符串装为对象
    let register = JSON.parse(postData)
    // 向数据库中添加新的注册用户
    Admin.create({
      username: register.name,
      email: register.email,
      password: register.pass,
      role: 'normal',
      state: 1
    })
      .then(() => {
        console.log('用户创建成功')
        res.send({ status: 200, msg: '用户创建成功' })
      })
      .catch(() => {
        console.log('用户创建失败')
        res.status(400).send({ status: 400, msg: '用户创建失败' })
      })
  })
})

// 登录接口
app.post('/login', (req, res) => {
  // 服务端接收 post 的请求参数
  let postData = ''

  req.on('data', (chunk) => {
    postData += chunk.toString()
  })
  req.on('end', async () => {
    // 将 字符串装为对象
    let { username, password } = JSON.parse(postData)
    let user = await Admin.findOne({ username })

    // console.log(JSON.stringify(user._id)) 输出当前登录用户在数据库中的id

    // 如果 该用户在数据库中存在， 用户名我设置了唯一性，所以不会查错用户的
    if (user) {
      let tokens = JSON.stringify(user._id) // 返回给浏览器的用户唯一标识
      if (password == user.password) {
        // 浏览器的密码和数据库的密码一致
        res.send({
          status: 200,
          token: tokens,
          user: true,
          msg: '登录成功'
        })
      } else {
        res.send({
          status: 400,
          token: '',
          user: true,
          msg: '用户名或者密码错误'
        })
      }
    } else {
      res.send({
        status: 404,
        token: '',
        user: false,
        msg: '该用户不存在'
      })
    }
  })
})

app.listen(3000, () => {
  console.log('服务器已经启动，3000端口监听中... http://192.168.1.109:3000/')
})
